#ifndef __THREAD_FIXED_POINT_H
#define __THREAD_FIXED_POINT_H

/* 左移15位 */
#define F 15
/* 将整数转换为浮点数 */
#define FP_CONST(A) ((int)(A << F))
/* 两个浮点数相加 */
#define FP_ADD(A,B) (A + B)
/* 浮点数A+整数B */
#define FP_ADD_MIX(A,B) (A + (B << F))
/* 浮点数相减 */
#define FP_SUB(A,B) (A - B)
/* 浮点数A-整数B */
#define FP_SUB_MIX(A,B) (A - (B << F))
/* 浮点数A*整数B */
#define FP_MULT_MIX(A,B) (A * B)
/* 浮点数A/整数B */
#define FP_DIV_MIX(A,B) (A / B)
/* 浮点数相乘 */
#define FP_MULT(A,B) ((int)(((int64_t) A) * B >> F))
/* 浮点数相除 */
#define FP_DIV(A,B) ((int)((((int64_t) A) << F) / B))
/* 浮点数转换为整数（向0舍入） */
#define FP_INT_PART(A) (A >> F)
/* 浮点数转换为整数（四舍五入） */
#define FP_ROUND(A) (A >= 0 ? ((A + (1 << (F - 1))) >> F) \
        : ((A - (1 << (F - 1))) >> F))

#endif /* thread/fixed_point.h */

